﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReducaoPena {
	public class Tarefa : ICloneable {

		private Int32 codigo;
		private Int32 pontos;
		private DiaSemana dia;
		private DateTime hora_inicio;
		private DateTime hora_fim;

		public Int32 Codigo {
			get { return codigo; }
			set { codigo = value; }
		}

		public Int32 Pontos {
			get { return this.pontos; }
			set { this.pontos = value; }
		}

		public DiaSemana Dia {
			get { return this.dia; }
			set { this.dia = value; }
		}

		public DateTime HoraInicio {
			get { return this.hora_inicio; }
			set { this.hora_inicio = value; }
		}

		public DateTime HoraFim {
			get { return this.hora_fim; }
			set { this.hora_fim = value; }
		}

		public Tarefa(Int32 codigo, Int32 pontos, String str_dia, String str_hora_inicio, String str_hora_fim) {
			
			if(!DateTime.TryParseExact("01/01/0001 " + str_hora_inicio, "dd/MM/yyyy HH:mm", System.Globalization.CultureInfo.GetCultureInfo("pt-BR"),System.Globalization.DateTimeStyles.None, out this.hora_inicio))
				throw new ArgumentException("Hora inválida. Formato HH:MM");

			if (!DateTime.TryParseExact("01/01/0001 " + str_hora_fim, "dd/MM/yyyy HH:mm", System.Globalization.CultureInfo.GetCultureInfo("pt-BR"), System.Globalization.DateTimeStyles.None, out this.hora_fim))
				throw new ArgumentException("Hora inválida. Formato HH:MM");
			
			if(codigo < 1 || codigo > 10000)
				throw new ArgumentException("Código de tarefa inválido");

			if (pontos < 1 || pontos > 50)
				throw new ArgumentException("Pontuação de tarefa inválida");

			try {
				if (str_dia.Length != 3)
					throw new ArgumentException("Dia da semana inválido");
					
				this.dia = (DiaSemana)Enum.Parse(typeof(DiaSemana), str_dia, true);
			} catch {
				throw new ArgumentException("Dia da semana inválido");
			}

			this.codigo = codigo;
			this.pontos = pontos;

		}

		public override string ToString() {
			return this.codigo.ToString();
		}



		#region ICloneable Members

		public object Clone() {
			return MemberwiseClone();
		}

		#endregion
	}
	

	public enum DiaSemana : byte {
		Seg = 0,
		Ter = 1,
		Qua = 2,
		Qui = 3,
		Sex = 4
	}
}
